home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / include / compiz / compiz-animation.h next >
C/C++ Source or Header  |  2009-10-15  |  9KB  |  312 lines

  1. #ifndef _COMPIZ_ANIMATION_H
  2. #define _COMPIZ_ANIMATION_H
  3.  
  4. #define ANIMATION_ABIVERSION 20081221
  5.  
  6. typedef enum
  7. {
  8.     WindowEventOpen = 0,
  9.     WindowEventClose,
  10.     WindowEventMinimize,
  11.     WindowEventUnminimize,
  12.     WindowEventShade,
  13.     WindowEventUnshade,
  14.     WindowEventFocus,
  15.     WindowEventNum,
  16.     WindowEventNone
  17. } WindowEvent;
  18.  
  19. typedef enum
  20. {
  21.     AnimEventOpen = 0,
  22.     AnimEventClose,
  23.     AnimEventMinimize,
  24.     AnimEventShade,
  25.     AnimEventFocus,
  26.     AnimEventNum
  27. } AnimEvent;
  28.  
  29. typedef struct _AnimEffectProperties
  30. {
  31.     void (*updateWindowAttribFunc) (CompWindow *,
  32.                     WindowPaintAttrib *);
  33.     void (*prePaintWindowFunc) (CompWindow *);
  34.     void (*postPaintWindowFunc) (CompWindow *);
  35.     void (*animStepFunc) (CompWindow *, float time);
  36.     Bool (*initFunc) (CompWindow *);
  37.     void (*initGridFunc) (CompWindow *, int *, int *);
  38.     void (*addCustomGeometryFunc) (CompWindow *, int, Box *,
  39.                    int, CompMatrix *);
  40.     void (*drawCustomGeometryFunc) (CompWindow *);
  41.     Bool (*letOthersDrawGeomsFunc) (CompWindow *);
  42.     void (*updateWinTransformFunc) (CompWindow *,
  43.                     CompTransform *);
  44.     Bool (*prePrepPaintScreenFunc) (CompWindow *, int msSinceLastPaint);
  45.     void (*postPrepPaintScreenFunc) (CompWindow *);
  46.     void (*updateBBFunc) (CompOutput *, CompWindow *, Box *);
  47.     void (*cleanupFunc) (CompWindow *);
  48.     void (*refreshFunc) (CompWindow *, Bool animInitialized);
  49.     Bool (*zoomToIconFunc) (CompWindow *);
  50.     Bool modelAnimIs3D;        // TRUE if anim uses model and 3d coords
  51.     Bool useQTexCoord;        // TRUE if effect needs Q texture coordinates
  52.     void *extraProperties;
  53. } AnimEffectProperties;
  54.  
  55. typedef struct _AnimEffectInfo
  56. {
  57.     char *name; // name of the animation effect, e.g. "animationpack:Implode"
  58.  
  59.     // to be set to TRUE for the window event animation list(s) that
  60.     // the new animation (value) should be added to
  61.     // (0: open, 1: close, 2: minimize, 3: shade, 4: focus)
  62.     Bool usedForEvents[AnimEventNum];
  63.  
  64.     AnimEffectProperties properties;
  65. } AnimEffectInfo;
  66.  
  67. typedef const AnimEffectInfo * AnimEffect;
  68.  
  69. typedef struct _ExtensionPluginInfo
  70. {
  71.     unsigned int nEffects;
  72.     AnimEffect *effects;
  73.  
  74.     // Plugin options to be used in "effect options" strings
  75.     unsigned int nEffectOptions;
  76.     CompOption *effectOptions;
  77.  
  78.     // Non-window functions
  79.     void (*prePaintOutputFunc) (CompScreen *s, CompOutput *output);
  80. } ExtensionPluginInfo;
  81.  
  82. typedef struct _xy_pair
  83. {
  84.     float x, y;
  85. } Point, Vector;
  86.  
  87. typedef struct
  88. {
  89.     float x1, x2, y1, y2;
  90. } Boxf;
  91.  
  92. typedef struct _xyz_tuple
  93. {
  94.     float x, y, z;
  95. } Point3d, Vector3d;
  96.  
  97. typedef struct _Object
  98. {
  99.     Point gridPosition;        // position on window in [0,1] range
  100.     Point3d position;        // position on screen
  101.  
  102.     // Texture x, y coordinates will be offset by given amounts
  103.     // for quads that fall after and before this object in x and y directions.
  104.     // Currently only y offset can be used.
  105.     Point offsetTexCoordForQuadBefore;
  106.     Point offsetTexCoordForQuadAfter;
  107. } Object;
  108.  
  109. typedef struct _Model
  110. {
  111.     Object *objects;
  112.     int numObjects;
  113.     int gridWidth;
  114.     int gridHeight;
  115.  
  116.     int winWidth;        // keeps win. size when model was created
  117.     int winHeight;
  118.  
  119.     Vector scale;
  120.     Point scaleOrigin;
  121.  
  122.     WindowEvent forWindowEvent;
  123.     float topHeight;
  124.     float bottomHeight;
  125. } Model;
  126.  
  127. // Window properties common to multiple animation effects
  128. typedef struct _AnimWindowCommon
  129. {
  130.     float animTotalTime;
  131.     float animRemainingTime;
  132.     float timestep;        // to be used in updateWindowAttribFunc
  133.  
  134.     int animOverrideProgressDir; // 0: default dir, 1: forward, 2: backward
  135.  
  136.     WindowEvent curWindowEvent;
  137.     AnimEffect curAnimEffect;
  138.  
  139.     FragmentAttrib curPaintAttrib;
  140.  
  141.     Region drawRegion;
  142.     Bool useDrawRegion;
  143.  
  144.     XRectangle icon;
  145.  
  146.     GLushort storedOpacity;
  147.  
  148.     CompTransform transform;
  149.     Bool usingTransform;     // whether transform matrix is used for the current effect
  150.  
  151.     float transformStartProgress;
  152.     float transformProgress;
  153.  
  154.     Model *model;   // for grid engine
  155. } AnimWindowCommon;
  156.  
  157. typedef enum
  158. {
  159.     AnimDirectionDown = 0,
  160.     AnimDirectionUp,
  161.     AnimDirectionLeft,
  162.     AnimDirectionRight,
  163.     AnimDirectionRandom,
  164.     AnimDirectionAuto
  165. } AnimDirection;
  166. #define LAST_ANIM_DIRECTION 5
  167.  
  168. typedef void
  169. (*UpdateBBProc) (CompOutput *output,
  170.          CompWindow * w,
  171.          Box *BB);
  172.  
  173. // Base functions for extension plugins to call
  174. typedef struct _AnimBaseFunctions {
  175.     void (*addExtension) (CompScreen *s,
  176.               ExtensionPluginInfo *extensionPluginInfo);
  177.     void (*removeExtension) (CompScreen *s,
  178.                  ExtensionPluginInfo *extensionPluginInfo);
  179.     CompOptionValue * (*getPluginOptVal)
  180.     (CompWindow *w, ExtensionPluginInfo *extensionPluginInfo, int optionId);
  181.     Bool (*getMousePointerXY) (CompScreen *s, short *x, short *y);
  182.     UpdateBBProc    updateBBScreen;
  183.     UpdateBBProc    updateBBWindow;
  184.     UpdateBBProc    modelUpdateBB;
  185.     UpdateBBProc    compTransformUpdateBB;
  186.     Bool (*defaultAnimInit) (CompWindow * w);
  187.     void (*defaultAnimStep) (CompWindow * w, float time);
  188.     void (*defaultUpdateWindowTransform) (CompWindow *w,
  189.                       CompTransform *wTransform);
  190.     float (*getProgressAndCenter) (CompWindow *w,
  191.                    Point *center);
  192.  
  193.     float (*defaultAnimProgress) (CompWindow *w);
  194.     float (*sigmoidAnimProgress) (CompWindow *w);
  195.     float (*decelerateProgressCustom) (float progress,
  196.                        float minx,
  197.                        float maxx);
  198.     float (*decelerateProgress) (float progress);
  199.     AnimDirection (*getActualAnimDirection) (CompWindow * w,
  200.                          AnimDirection dir,
  201.                          Bool openDir);
  202.     void (*expandBoxWithBox) (Box *target, Box *source);
  203.     void (*expandBoxWithPoint) (Box *target, float fx, float fy);
  204.     void (*prepareTransform) (CompScreen *s,
  205.                   CompOutput *output,
  206.                   CompTransform *resultTransform,
  207.                   CompTransform *transform);
  208.     AnimWindowCommon * (*getAnimWindowCommon) (CompWindow *w);
  209.     Bool (*returnTrue) (CompWindow *w);
  210.     void (*postAnimationCleanup) (CompWindow *w);
  211.     void (*fxZoomUpdateWindowAttrib) (CompWindow * w,
  212.                       WindowPaintAttrib * wAttrib);
  213. } AnimBaseFunctions;
  214.  
  215.  
  216. #define OPTION_GETTERS(extensionBaseFunctions,                \
  217.                extensionPluginInfo, firstEffectOption)        \
  218. static inline CompOptionValue *                        \
  219. animGetOptVal (CompWindow *w,                        \
  220.            int optionId)                        \
  221. {                                    \
  222.     return (extensionBaseFunctions)->getPluginOptVal            \
  223.         (w, (extensionPluginInfo), optionId - (firstEffectOption));    \
  224. }                        \
  225.                         \
  226. inline Bool                    \
  227. animGetB (CompWindow *w,            \
  228.       int optionId)                \
  229. {                        \
  230.     return animGetOptVal (w, optionId)->b;    \
  231. }                        \
  232.                         \
  233. inline int                    \
  234. animGetI (CompWindow *w,            \
  235.       int optionId)                \
  236. {                        \
  237.     return animGetOptVal (w, optionId)->i;    \
  238. }                        \
  239.                         \
  240. inline float                    \
  241. animGetF (CompWindow *w,            \
  242.       int optionId)                \
  243. {                        \
  244.     return animGetOptVal (w, optionId)->f;    \
  245. }                        \
  246.                         \
  247. inline char *                    \
  248. animGetS (CompWindow *w,            \
  249.       int optionId)                \
  250. {                        \
  251.     return animGetOptVal (w, optionId)->s;    \
  252. }                        \
  253.                         \
  254. inline unsigned short *                \
  255. animGetC (CompWindow *w,            \
  256.       int optionId)                \
  257. {                        \
  258.     return animGetOptVal (w, optionId)->c;    \
  259. }
  260.  
  261. #define OPTION_GETTERS_HDR            \
  262.                         \
  263. inline Bool                    \
  264. animGetB (CompWindow *w,            \
  265.       int optionId);            \
  266.                         \
  267. inline int                    \
  268. animGetI (CompWindow *w,            \
  269.       int optionId);            \
  270.                         \
  271. inline float                    \
  272. animGetF (CompWindow *w,            \
  273.       int optionId);            \
  274.                         \
  275. inline char *                    \
  276. animGetS (CompWindow *w,            \
  277.       int optionId);            \
  278.                         \
  279. inline unsigned short *                \
  280. animGetC (CompWindow *w,            \
  281.       int optionId);
  282.  
  283.  
  284. #define WIN_X(w) ((w)->attrib.x - (w)->output.left)
  285. #define WIN_Y(w) ((w)->attrib.y - (w)->output.top)
  286. #define WIN_W(w) ((w)->width + (w)->output.left + (w)->output.right)
  287. #define WIN_H(w) ((w)->height + (w)->output.top + (w)->output.bottom)
  288.  
  289. #define BORDER_X(w) ((w)->attrib.x - (w)->input.left)
  290. #define BORDER_Y(w) ((w)->attrib.y - (w)->input.top)
  291. #define BORDER_W(w) ((w)->width + (w)->input.left + (w)->input.right)
  292. #define BORDER_H(w) ((w)->height + (w)->input.top + (w)->input.bottom)
  293.  
  294. #define RAND_FLOAT() ((float)rand() / RAND_MAX)
  295.  
  296. #define sigmoid(fx) (1.0f/(1.0f+exp(-5.0f*2*((fx)-0.5))))
  297. #define sigmoid2(fx, s) (1.0f/(1.0f+exp(-(s)*2*((fx)-0.5))))
  298.  
  299. #define NUM_OPTIONS(s) (sizeof ((s)->opt) / sizeof (CompOption))
  300.  
  301.  
  302. // ratio of perceived length of animation compared to real duration
  303. // to make it appear to have the same speed with other animation effects
  304.  
  305. #define SPRINGY_ZOOM_PERCEIVED_T 0.55f
  306. #define NONSPRINGY_ZOOM_PERCEIVED_T 0.6f
  307. #define ZOOM_PERCEIVED_T 0.75f
  308.  
  309.  
  310. #endif
  311.  
  312.